/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gruppenkalenderProjekt.kalenderinterface;

import com.toedter.calendar.JDateChooser;
import gruppenkalenderProjekt.data.Benutzer;
import gruppenkalenderProjekt.data.Kalender;
import gruppenkalenderProjekt.data.KalenderImpl;
import gruppenkalenderProjekt.data.Kalendereintrag;
import gruppenkalenderProjekt.data.Kategorie;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import layout.TableLayout;

/**
 *
 * @author Gruppe 2
 */
class ReportGenerator implements ActionListener {

    // Interfaceclient starten bzw. Verbindung zur Verwaltung herstellen
    private InterfaceClient ic;
    //Strings initiieren
    private static String aktualisierenButtonString = "Aktualisieren";
    private static String abbrechenButtonString = "Beenden";
    private static String vonString = "Von:";
    private static String bisString = "Bis:";
    private static StringBuffer bufferForTextArea = new StringBuffer();
    //Labels, Textfelder und Buttons initiieren
    final JButton aktualisierenButton = new JButton(aktualisierenButtonString);
    final JButton abbrechenButton = new JButton(abbrechenButtonString);
    final JComboBox kalenderComboBox = new JComboBox();
    final JComboBox kategorieComboBox = new JComboBox();
    final JComboBox benutzerComboBox = new JComboBox();
    private JDateChooser dateChooserStart = new JDateChooser();
    private JDateChooser dateChooserEnde = new JDateChooser();
    private JCheckBox keinDatumCheckbox = new JCheckBox();
    private JTextField startDatumTextField = new JTextField("Von");
    private JTextField endeDatumTextField = new JTextField("Bis");
    final JLabel von = new JLabel(vonString);
    final JLabel bis = new JLabel(bisString);
    final ButtonGroup gruppeOben = new ButtonGroup();
    final JTextArea listenTextArea = new JTextArea(bufferForTextArea.toString(), 1, 1);
    final JTextArea kategorieTextArea = new JTextArea();
    final JScrollPane scrollPaneBeschreibungTextArea = new JScrollPane(listenTextArea);    
    JFrame frame = new JFrame();
    private Benutzer aktuellerBenutzer;
    private Vector<Kalender> alleKalender;
    private Vector<Kategorie> alleKategorien;
    private Vector<Benutzer> alleBenutzer;
    private Vector<Kalendereintrag> alleKalendereintraege;
    private Vector<Kalendereintrag> alleKalendereintraegeVonKalender;
    private Vector<Kalender> aktuellerKalender = new Vector<Kalender>();
    private JPanel right;

    public JPanel generateComponents(ReportgeneratorInterface rgi) throws RemoteException {
        //Server IP String von dem GruppenkalenderInterface holen und als IP in den Konstruktor des Interfaceclients eintragen
        
        ic = rgi.getIC();


        // Layout und Container initiieren
        aktuellerBenutzer = rgi.getAktuellerBenutzer();
        alleKalendereintraege = ic.getAlleKalendereintraege();
        alleKategorien = ic.getAlleKategorien();
        alleKalender = ic.getAlleKalender();


        Container contentPane = frame.getContentPane();
        BorderLayout layout = new BorderLayout();
        contentPane.setLayout(layout);

        // Panels  
        JPanel big = new JPanel(new BorderLayout());
        big.setBorder(
                BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("Kalenderübersicht"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)));

        // Panels
        double sizeRight[][] = {{500}, // Columns             275 Breite jeder Spalte (Komischerweise wird nur eine Spalte alleine nicht gesetzt)
            {40, 5, 390}};
        JPanel right = new JPanel(new TableLayout(sizeRight));
        right.setBorder(
                BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("Aktuelle Ansicht"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)));

        // Panels
        double sizeLeft[][] = {{200}, // Columns             275 Breite jeder Spalte (Komischerweise wird nur eine Spalte alleine nicht gesetzt)
            {260, 10, 80}};
        JPanel left = new JPanel(new TableLayout(sizeLeft));



        // Panels
        double sizeAuswahlOben[][] = {{160}, // Columns             275 Breite jeder Spalte (Komischerweise wird nur eine Spalte alleine nicht gesetzt)
            {25, 10, 25, 10, 25, 10, 10, 2, 25, 10, 10, 2, 25}};
        JPanel auswahlOben = new JPanel(new TableLayout(sizeAuswahlOben));
        auswahlOben.setBorder(
                BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("Filter setzen"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)));


        // Panels
        double sizeDatumWaehlen[][] = {{150}, // Columns             275 Breite jeder Spalte (Komischerweise wird nur eine Spalte alleine nicht gesetzt)
            {25, 10, 25}};
        JPanel datumWaehlen = new JPanel(new TableLayout(sizeDatumWaehlen));
        datumWaehlen.setBorder(
                BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("Ansicht auswählen"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)));

        // Buttons
        double sizeButtons[][] = {{533, 100, 10, 100}, // Columns             275 Breite jeder Spalte (Komischerweise wird nur eine Spalte alleine nicht gesetzt)
            {25}};           // Rows                 Höhe jeder Zeile (35=Buttongröße, 15=Leerzeile)

        JPanel bottom = new JPanel(new TableLayout(sizeButtons));



        this.setDropdownMenuForKalender();
        this.setDropdownMenuForKategorie();
        this.setDropdownMenuForBenutzer();


        //OnButtonClick
        aktualisierenButton.addActionListener(this);
        aktualisierenButton.setActionCommand("Aktualisieren");
        //OnButtonClick
        abbrechenButton.addActionListener(rgi);
        abbrechenButton.setActionCommand("Beenden");

        auswahlOben.add(kalenderComboBox, "0,0");
        auswahlOben.add(kategorieComboBox, "0,2");
        auswahlOben.add(benutzerComboBox, "0,4");

        auswahlOben.add(von, "0,6");
        auswahlOben.add(dateChooserStart, "0,8");
        auswahlOben.add(bis, "0,10");
        auswahlOben.add(dateChooserEnde, "0,12");

        left.add(auswahlOben, "0,0");

        right.add(kategorieTextArea, "0,0");
        right.add(scrollPaneBeschreibungTextArea, "0,2");


        bottom.add(aktualisierenButton, "1,0");
        bottom.add(abbrechenButton, "3,0");


        big.add(left, BorderLayout.WEST);
        big.add(right, BorderLayout.EAST);
        big.add(bottom, BorderLayout.PAGE_END);



        contentPane.add(big, BorderLayout.NORTH);
        return (JPanel) contentPane;


    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Aktualisieren")) {
            try {
                bufferForTextArea = null;
                bufferForTextArea = new StringBuffer();
                listenTextArea.setText(bufferForTextArea.toString());
                kategorieTextArea.setText(kategorieComboBox.getSelectedItem().toString());
                kategorieTextArea.setBackground(Color.white);

                
                if (kalenderComboBox.getSelectedItem().equals("Alle Kalender") && kategorieComboBox.getSelectedItem().equals("Alle Kategorien")) {
                    this.setTextAreaMitAllenKalendern();
                } else if (kategorieComboBox.getSelectedItem().equals("Alle Kategorien")) {
                    this.setTextAreaMitAusgewaehltemKalender();
                } else {
                    this.setTextAreaMitAusgewaehltemKalenderUndKategorie();
                }
            } catch (RemoteException ex) {
                Logger.getLogger(ReportGenerator.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }

    public void setDropdownMenuForKalender() throws RemoteException {

        dateChooserEnde.setDate(Calendar.getInstance().getTime()); //heutiges Datum setzen
        dateChooserStart.setDate(Calendar.getInstance().getTime()); //heutiges Datum setzen

        if (kalenderComboBox.getItemCount() != 0) {
            kalenderComboBox.removeAllItems();
        }

        if (aktuellerBenutzer.isSuperbenutzer()) {
            kalenderComboBox.addItem("Alle Kalender");
        }



        for (int i = 0; i < alleKalender.size(); i++) {
            try {
                if (aktuellerBenutzer.isSuperbenutzer() == false) {
                    for (int j = 0; j < alleKalender.elementAt(i).getBenutzer().size(); j++) {
                        if (aktuellerBenutzer.getBenutzername().equals(alleKalender.elementAt(i).getBenutzer().elementAt(j).getBenutzername())) {
                            kalenderComboBox.addItem(alleKalender.elementAt(i).getName());
                        }
                    }
                } else {
                    kalenderComboBox.addItem(alleKalender.elementAt(i).getName());
                }

                kalenderComboBox.setSelectedItem(0);
            } catch (RemoteException ex) {
                Logger.getLogger(Kalenderanlage.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void setDropdownMenuForKategorie() throws RemoteException {
        if (kategorieComboBox.getItemCount() != 0) {
            kategorieComboBox.removeAllItems();
        }

        alleKategorien = ic.getAlleKategorien();

        kategorieComboBox.addItem("Alle Kategorien");

        for (int i = 0; i < alleKategorien.size(); i++) {
            kategorieComboBox.addItem(alleKategorien.elementAt(i).getBezeichnung());

        }
    }

    public void setDropdownMenuForBenutzer() throws RemoteException {
        if (benutzerComboBox.getItemCount() != 0) {
            benutzerComboBox.removeAllItems();
        }

        alleBenutzer = ic.getAlleBenutzer();

        benutzerComboBox.addItem("Alle Benutzer");

        for (int i = 0; i < alleBenutzer.size(); i++) {
            benutzerComboBox.addItem(alleBenutzer.elementAt(i).getBenutzername());

        }
    }

    public void setTextAreaMitAllenKalendern() throws RemoteException {

        kategorieTextArea.setBackground(Color.WHITE);
        kategorieTextArea.setText("Alle Kategorien");


        for (int i = 0; i < alleKalender.size(); i++) {
            Calendar temp = Calendar.getInstance();
            temp.setTime(dateChooserStart.getCalendar().getTime());
            temp.add(Calendar.DAY_OF_MONTH, -1);

            bufferForTextArea.append(alleKalender.elementAt(i).getName() + ": \n");
            for (int j = 0; j < alleKalender.elementAt(i).getKalendereintraege().size(); j++) {

                if ((temp.getTime().before(alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getStartdatum()) &&
                        dateChooserEnde.getCalendar().getTime().after(alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getStartdatum())) ||
                        alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getWiederholung() !=0 
                        ) {

                    String folgeTermin = "";

                    if (alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getFolgetermin() != null) {
                        folgeTermin = alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getFolgetermin().getTitel();
                    } else {
                        folgeTermin = "Kein Folgetermin vorhanden";
                    }

                    String kategorie = "";

                    if (alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getKategorie() != null) {
                        kategorie = alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getKategorie().getBezeichnung();
                    } else {
                        folgeTermin = "Keine Kategorie gesetzt";
                    }

                    String beschreibung = "";

                    if (alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getFolgetermin() != null) {
                        beschreibung = alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getBeschreibung();
                    } else {
                        beschreibung = "Keine Beschreibung vorhanden";
                    }

                    String wiederholung = "";

                    int tempWiederholung = alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getWiederholung();

                    if (tempWiederholung == 0) {
                        wiederholung = "Keine Wiederholung";
                    }
                    if (tempWiederholung == 1) {
                        wiederholung = "Wöchentlich";
                    }
                    if (tempWiederholung == 2) {
                        wiederholung = "Monatlich";
                    }
                    if (tempWiederholung == 3) {
                        wiederholung = "Jährlich";
                    }

                    Vector<Benutzer> teilnehmer = new Vector<Benutzer>();
                    StringBuffer benutzernamen = new StringBuffer();
                    teilnehmer = alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getTeilnehmer();
                    for (int z = 0; z < teilnehmer.size(); z++) {
                        benutzernamen.append(teilnehmer.elementAt(z).getBenutzername() + ", ");
                    }

                    if (benutzerComboBox.getSelectedItem().equals("Alle Benutzer")) {
                        bufferForTextArea.append("" +
                                "\n   Titel: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getTitel() +
                                "\n   Datum: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getStartdatum() +
                                " bis " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getEnddatum() +
                                "\n   Zeit: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getStartzeit() +
                                " bis " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getEndzeit() +
                                "\n   Ort: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getOrt() +
                                "\n   Kategorie: " + kategorie +
                                "\n   Beschreibung: " + beschreibung +
                                "\n   Ersteller: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getErsteller().getBenutzername() +
                                "\n   Folgetermin: " + folgeTermin +
                                "\n   Teilnehmer: " + benutzernamen +
                                "\n   Wiederholung: " + wiederholung);

                        bufferForTextArea.append("\n_");
                    } else {
                        for (int z = 0; z < teilnehmer.size(); z++) {
                            if (teilnehmer.elementAt(z).getBenutzername().equals(benutzerComboBox.getSelectedItem())) {
                                bufferForTextArea.append("" +
                                        "\n   Titel: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getTitel() +
                                        "\n   Datum: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getStartdatum() +
                                        " bis " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getEnddatum() +
                                        "\n   Zeit: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getStartzeit() +
                                        " bis " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getEndzeit() +
                                        "\n   Ort: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getOrt() +
                                        "\n   Kategorie: " + kategorie +
                                        "\n   Beschreibung: " + beschreibung +
                                        "\n   Ersteller: " + alleKalender.elementAt(i).getKalendereintraege().elementAt(j).getErsteller().getBenutzername() +
                                        "\n   Folgetermin: " + folgeTermin +
                                        "\n   Teilnehmer: " + benutzernamen +
                                        "\n   Wiederholung: " + wiederholung);
                                bufferForTextArea.append("\n_");
                            }

                        }
                    }
                }
            }
            bufferForTextArea.append("\n" + "______________________________________________" + "\n");
        }
        listenTextArea.setText(bufferForTextArea.toString());

    }

    public void setTextAreaMitAusgewaehltemKalender() throws RemoteException {
        boolean benutzerKontrolle = false;

        kategorieTextArea.setBackground(Color.WHITE);
        kategorieTextArea.setText("Alle Kategorien");

        // Aktuellen Kalender aus der Dropbox holen

        Kalender aktuellerKalender = new KalenderImpl();
        for (int i = 0; i < alleKalender.size(); i++) {
            if (kalenderComboBox.getSelectedItem().equals(alleKalender.elementAt(i).getName())) {
                aktuellerKalender = alleKalender.elementAt(i);
            }
        }
        for (int j = 0; j < aktuellerKalender.getKalendereintraege().size(); j++) {
            Calendar temp = Calendar.getInstance();
            temp.setTime(dateChooserStart.getCalendar().getTime());
            temp.add(Calendar.DAY_OF_MONTH, -1);
            if ((temp.getTime().before(aktuellerKalender.getKalendereintraege().elementAt(j).getStartdatum()) &&
                    dateChooserEnde.getDate().after(aktuellerKalender.getKalendereintraege().elementAt(j).getStartdatum())) ||
                    aktuellerKalender.getKalendereintraege().elementAt(j).getWiederholung() !=0
                    ) {
                String folgeTermin = "";

                if (aktuellerKalender.getKalendereintraege().elementAt(j).getFolgetermin() != null) {
                    folgeTermin = aktuellerKalender.getKalendereintraege().elementAt(j).getFolgetermin().getTitel();
                } else {
                    folgeTermin = "Kein Folgetermin vorhanden";
                }

                String kategorie = "";

                if (aktuellerKalender.getKalendereintraege().elementAt(j).getKategorie() != null) {
                    kategorie = aktuellerKalender.getKalendereintraege().elementAt(j).getKategorie().getBezeichnung();
                } else {
                    folgeTermin = "Keine Kategorie gesetzt";
                }

                String beschreibung = "";

                if (aktuellerKalender.getKalendereintraege().elementAt(j).getFolgetermin() != null) {
                    beschreibung = aktuellerKalender.getKalendereintraege().elementAt(j).getBeschreibung();
                } else {
                    beschreibung = "Keine Beschreibung vorhanden";
                }

                String wiederholung = "";

                int tempWiederholung = aktuellerKalender.getKalendereintraege().elementAt(j).getWiederholung();

                if (tempWiederholung == 0) {
                    wiederholung = "Keine Wiederholung";
                }
                if (tempWiederholung == 1) {
                    wiederholung = "Wöchentlich";
                }
                if (tempWiederholung == 2) {
                    wiederholung = "Monatlich";
                }
                if (tempWiederholung == 3) {
                    wiederholung = "Jährlich";
                }

                Vector<Benutzer> teilnehmer = aktuellerKalender.getKalendereintraege().elementAt(j).getTeilnehmer();

                StringBuffer benutzernamen = new StringBuffer();
                for (int z = 0; z < teilnehmer.size(); z++) {
                    benutzernamen.append(teilnehmer.elementAt(z).getBenutzername() + ", ");

                    System.out.println(teilnehmer.elementAt(z).getBenutzername());


                    if (aktuellerBenutzer.getBenutzername().equals(teilnehmer.elementAt(z).getBenutzername())) {
                        benutzerKontrolle = true;
                    }

                }

                if (benutzerKontrolle == true || aktuellerBenutzer.isSuperbenutzer()) {

                    if (benutzerComboBox.getSelectedItem().equals("Alle Benutzer")) {
                        bufferForTextArea.append(
                                "\n   Titel: " + aktuellerKalender.getKalendereintraege().elementAt(j).getTitel() +
                                "\n   Datum: " + aktuellerKalender.getKalendereintraege().elementAt(j).getStartdatum() +
                                " bis " + aktuellerKalender.getKalendereintraege().elementAt(j).getEnddatum() +
                                "\n   Zeit: " + aktuellerKalender.getKalendereintraege().elementAt(j).getStartzeit() +
                                " bis " + aktuellerKalender.getKalendereintraege().elementAt(j).getEndzeit() +
                                "\n   Ort: " + aktuellerKalender.getKalendereintraege().elementAt(j).getOrt() +
                                "\n   Kategorie: " + kategorie +
                                "\n   Beschreibung: " + beschreibung +
                                "\n   Ersteller: " + aktuellerKalender.getKalendereintraege().elementAt(j).getErsteller().getBenutzername() +
                                "\n   Folgetermin: " + folgeTermin +
                                "\n   Teilnehmer: " + benutzernamen +
                                "\n   Wiederholung: " + wiederholung);

                        bufferForTextArea.append("\n_");
                    } else {
                        for (int z = 0; z < teilnehmer.size(); z++) {
                            if (teilnehmer.elementAt(z).getBenutzername().equals(benutzerComboBox.getSelectedItem())) {
                                bufferForTextArea.append("" +
                                        "\n   Titel: " + aktuellerKalender.getKalendereintraege().elementAt(j).getTitel() +
                                        "\n   Datum: " + aktuellerKalender.getKalendereintraege().elementAt(j).getStartdatum() +
                                        " bis " + aktuellerKalender.getKalendereintraege().elementAt(j).getEnddatum() +
                                        "\n   Zeit: " + aktuellerKalender.getKalendereintraege().elementAt(j).getStartzeit() +
                                        " bis " + aktuellerKalender.getKalendereintraege().elementAt(j).getEndzeit() +
                                        "\n   Ort: " + aktuellerKalender.getKalendereintraege().elementAt(j).getOrt() +
                                        "\n   Kategorie: " + kategorie +
                                        "\n   Beschreibung: " + beschreibung +
                                        "\n   Ersteller: " + aktuellerKalender.getKalendereintraege().elementAt(j).getErsteller().getBenutzername() +
                                        "\n   Folgetermin: " + folgeTermin +
                                        "\n   Teilnehmer: " + benutzernamen +
                                        "\n   Wiederholung: " + wiederholung);
                                bufferForTextArea.append("\n_");
                            }



                            benutzerKontrolle = false;
                        }
                    }
                }

                bufferForTextArea.append("\n" + "______________________________________________" + "\n");


                listenTextArea.setText(bufferForTextArea.toString());




            }
        }
    }

    public void setTextAreaMitAusgewaehltemKalenderUndKategorie() throws RemoteException {
        boolean benutzerKontrolle = false;

        aktuellerKalender.removeAllElements();
        if (kalenderComboBox.getSelectedItem().equals("Alle Kalender")) {
            for (int i = 0; i < alleKalender.size(); i++) {
                aktuellerKalender.add(alleKalender.elementAt(i));
                Vector<Kalendereintrag> tempKalendereintraegeVonKalender = ic.getKalendereintraegeVonKalender(aktuellerKalender.elementAt(i).getKalenderID());
                for (int j = 0; j < tempKalendereintraegeVonKalender.size(); j++) {
                    Kalendereintrag tempKalendereintrag = tempKalendereintraegeVonKalender.elementAt(j);
                    alleKalendereintraegeVonKalender.add(tempKalendereintrag);
                }
            }
        } else {
            // Aktuellen Kalender aus der Dropbox holen
            for (int i = 0; i < alleKalender.size(); i++) {
                if (kalenderComboBox.getSelectedItem().equals(alleKalender.elementAt(i).getName())) {
                    aktuellerKalender.add(alleKalender.elementAt(i));
                    alleKalendereintraegeVonKalender = ic.getKalendereintraegeVonKalender(aktuellerKalender.elementAt(0).getKalenderID());
                }
            }
        }




        Vector<Kalendereintrag> tempKalendereintraege = new Vector<Kalendereintrag>();


        for (int k = 0; k < alleKalendereintraegeVonKalender.size(); k++) {
            if (kategorieComboBox.getSelectedItem().equals(alleKalendereintraegeVonKalender.elementAt(k).getKategorie().getBezeichnung())) {
                tempKalendereintraege.add(alleKalendereintraegeVonKalender.elementAt(k));
                System.out.println(alleKalendereintraegeVonKalender.elementAt(k).getKategorie().getFarbe().toString());

                if (alleKalendereintraegeVonKalender.isEmpty()) {
                    kategorieTextArea.setBackground(Color.WHITE);
                    kategorieTextArea.setText("");
                } else {
                    kategorieTextArea.setBackground(alleKalendereintraegeVonKalender.elementAt(k).getKategorie().getFarbe());
                    kategorieTextArea.setText(alleKalendereintraegeVonKalender.elementAt(k).getKategorie().getBezeichnung());
                }
            }

        }

        Calendar temp = Calendar.getInstance();
        temp.setTime(dateChooserStart.getCalendar().getTime());
        temp.add(Calendar.DAY_OF_MONTH, -1);
        for (int j = 0; j < tempKalendereintraege.size(); j++) {
            if ((temp.getTime().before(tempKalendereintraege.elementAt(j).getStartdatum()) &
                    dateChooserEnde.getDate().after(tempKalendereintraege.elementAt(j).getStartdatum())) ||
                    tempKalendereintraege.elementAt(j).getWiederholung() !=0
                    ) {
                String folgeTermin = "";

                if (tempKalendereintraege.elementAt(j).getFolgetermin() != null) {
                    folgeTermin = tempKalendereintraege.elementAt(j).getFolgetermin().getTitel();
                } else {
                    folgeTermin = "Kein Folgetermin vorhanden";
                }

                String kategorie = "";

                if (tempKalendereintraege.elementAt(j).getKategorie() != null) {
                    kategorie = tempKalendereintraege.elementAt(j).getKategorie().getBezeichnung();
                } else {
                    folgeTermin = "Keine Kategorie gesetzt";
                }

                String beschreibung = "";

                if (tempKalendereintraege.elementAt(j).getFolgetermin() != null) {
                    beschreibung = tempKalendereintraege.elementAt(j).getBeschreibung();
                } else {
                    beschreibung = "Keine Beschreibung vorhanden";
                }

                String wiederholung = "";

                int tempWiederholung = tempKalendereintraege.elementAt(j).getWiederholung();

                if (tempWiederholung == 0) {
                    wiederholung = "Keine Wiederholung";
                }
                if (tempWiederholung == 1) {
                    wiederholung = "Wöchentlich";
                }
                if (tempWiederholung == 2) {
                    wiederholung = "Monatlich";
                }
                if (tempWiederholung == 3) {
                    wiederholung = "Jährlich";
                }

                Vector<Benutzer> teilnehmer = tempKalendereintraege.elementAt(j).getTeilnehmer();

                StringBuffer benutzernamen = new StringBuffer();
                for (int z = 0; z < teilnehmer.size(); z++) {
                    benutzernamen.append(teilnehmer.elementAt(z).getBenutzername() + ", ");

                    if (aktuellerBenutzer.getBenutzername().equals(teilnehmer.elementAt(z).getBenutzername())) {
                        benutzerKontrolle = true;
                    }

                }

                if (benutzerKontrolle == true || aktuellerBenutzer.isSuperbenutzer()) {

                    if (benutzerComboBox.getSelectedItem().equals("Alle Benutzer")) {
                        bufferForTextArea.append(
                                "\n   Titel: " + tempKalendereintraege.elementAt(j).getTitel() +
                                "\n   Datum: " + tempKalendereintraege.elementAt(j).getStartdatum() +
                                " bis " + tempKalendereintraege.elementAt(j).getEnddatum() +
                                "\n   Zeit: " + tempKalendereintraege.elementAt(j).getStartzeit() +
                                " bis " + tempKalendereintraege.elementAt(j).getEndzeit() +
                                "\n   Ort: " + tempKalendereintraege.elementAt(j).getOrt() +
                                "\n   Kategorie: " + kategorie +
                                "\n   Beschreibung: " + beschreibung +
                                "\n   Ersteller: " + tempKalendereintraege.elementAt(j).getErsteller().getBenutzername() +
                                "\n   Folgetermin: " + folgeTermin +
                                "\n   Teilnehmer: " + benutzernamen +
                                "\n   Wiederholung: " + wiederholung);

                        bufferForTextArea.append("\n_");

                    } else {
                        for (int z = 0; z < teilnehmer.size(); z++) {
                            if (teilnehmer.elementAt(z).getBenutzername().equals(benutzerComboBox.getSelectedItem())) {
                                bufferForTextArea.append("" +
                                        "\n   Titel: " + tempKalendereintraege.elementAt(j).getTitel() +
                                        "\n   Datum: " + tempKalendereintraege.elementAt(j).getStartdatum() +
                                        " bis " + tempKalendereintraege.elementAt(j).getEnddatum() +
                                        "\n   Zeit: " + tempKalendereintraege.elementAt(j).getStartzeit() +
                                        " bis " + tempKalendereintraege.elementAt(j).getEndzeit() +
                                        "\n   Ort: " + tempKalendereintraege.elementAt(j).getOrt() +
                                        "\n   Kategorie: " + kategorie +
                                        "\n   Beschreibung: " + beschreibung +
                                        "\n   Ersteller: " + tempKalendereintraege.elementAt(j).getErsteller().getBenutzername() +
                                        "\n   Folgetermin: " + folgeTermin +
                                        "\n   Teilnehmer: " + benutzernamen +
                                        "\n   Wiederholung: " + wiederholung);
                                bufferForTextArea.append("\n_");
                            }


                        }

                    }
                    benutzerKontrolle = false;
                }

                bufferForTextArea.append("\n" + "______________________________________________" + "\n");

                listenTextArea.setText(bufferForTextArea.toString());
            }
        }
    }
}


